﻿/**************************************************************
 *
 * 命名空间：Sgr.DataCategories.Application.Commands.AdministrativeDivisions
 * 创建时间：2025/3/19
 * 描述：更新行政区划命令验证器
 *
 **************************************************************/

using FluentValidation;
using Sgr.DataCategories.Application.Commands.AdministrativeDivisions;
using Sgr.DataCategories.Domain.AdministrativeDivisions;

namespace Sgr.DataCategories.Application.Validations.AdministrativeDivisions
{
    /// <summary>
    /// 更新行政区划命令验证器
    /// </summary>
    public class UpdateAdministrativeDivisionCommandValidator : AbstractValidator<UpdateAdministrativeDivisionCommand>
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        public UpdateAdministrativeDivisionCommandValidator()
        {
            RuleFor(c => c.Id)
                .GreaterThan(0)
                .WithMessage("行政区划ID必须大于0");

            RuleFor(c => c.Name)
                .NotEmpty()
                .WithMessage("行政区划名称不能为空")
                .MaximumLength(100)
                .WithMessage("行政区划名称长度不能超过100个字符");

            RuleFor(c => c.Code)
                .NotEmpty()
                .WithMessage("行政区划代码不能为空")
                .MaximumLength(50)
                .WithMessage("行政区划代码长度不能超过50个字符");

            RuleFor(c => c.ShortName)
                .MaximumLength(50)
                .When(c => c.ShortName != null)
                .WithMessage("行政区划简称长度不能超过50个字符");

            RuleFor(c => c.Description)
                .MaximumLength(1000)
                .When(c => c.Description != null)
                .WithMessage("行政区划描述长度不能超过1000个字符");

            RuleFor(c => c.State)
                .IsInEnum()
                .WithMessage("行政区划状态只能为Normal或Deactivate");
        }
    }
}